﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace MinhTuan
{
    public class AdminUser
    {

        #region   Properties

        private Int16 _User_Id;
        private string _User_Name;
        private string _User_Password;
        private string _User_FullName;
        private string _User_LastLogin;
        private bool _User_Function;
        private bool _IsActive;

        public Int16 Id
        {
            get { return _User_Id; }
            set { _User_Id = value; }
        }

        public string Name
        {
            get { return _User_Name; }
            set { _User_Name = value; }
        }

        public string Password
        {
            get { return _User_Password; }
            set { _User_Password = value; }
        }

        public string FullName
        {
            get { return _User_FullName; }
            set { _User_FullName = value; }
        }

        public string LastLogin
        {
            get { return _User_LastLogin; }
            set { _User_LastLogin = value; }
        }

        public bool IsFunction
        {
            get { return _User_Function; }
            set { _User_Function = value; }
        }

        public bool IsActive
        {
            get { return _IsActive; }
            set { _IsActive = value; }
        }

        #endregion

        #region  Constructor

        public AdminUser()
        {
            _User_Id = 0;
        }

        public AdminUser(Int16 User_Id, string User_Name, string User_FullName, string User_LastLogin, bool User_Function)
        {
            _User_Id = User_Id;
            _User_Name = User_Name;
            _User_FullName = User_FullName;
            _User_LastLogin = User_LastLogin;
            _User_Function = User_Function;
        }


        public AdminUser(Int16 User_Id, string User_Name, string User_Password, string User_FullName, string User_LastLogin, bool User_Function, bool Is_Active)
        {
            _User_Id = User_Id;
            _User_Name = User_Name;
            _User_Password = User_Password;
            _User_FullName = User_FullName;
            _User_LastLogin = User_LastLogin;
            _User_Function = User_Function;
            _IsActive = Is_Active;
        }
      
        
        #endregion

        #region  Get User Infos

        public static AdminUser CheckLogin(string UserName, string Password)
        {
            //try
            //{
                Access.InitAccess();
                string myIP = System.Web.HttpContext.Current.Request.UserHostAddress;
                Byte[] myPassword = Access.SecurityTool(Password);
                Access.mySqlCommand.CommandText = "Sp_Admin_Login";
                Access.mySqlCommand.Parameters.Add("@User_Name", SqlDbType.NVarChar).Value = UserName;
                Access.mySqlCommand.Parameters.Add("@User_Password", SqlDbType.Binary, 16).Value = myPassword;
                Access.mySqlCommand.Parameters.Add("@IPAddress", SqlDbType.NVarChar).Value = myIP;
                SqlDataReader myReader = default(SqlDataReader);
                myReader = Access.mySqlCommand.ExecuteReader();
                AdminUser myUser = new AdminUser();
                if (myReader.Read())
                {
                    Int16 UserId = Convert.ToInt16(myReader["User_Id"].ToString());
                    Boolean userFunction = Convert.ToBoolean(myReader["User_Function"].ToString());
                    Boolean userActive = Convert.ToBoolean(myReader["IsActive"].ToString());
                    myUser = new AdminUser(UserId, myReader["User_NameLogin"].ToString(), myReader["User_FullName"].ToString(), myReader["User_LastLogin"].ToString(), userFunction);
                }
                myReader.Close();
                Access.ClosedAccess();
                return myUser;
            //}
            //catch (Exception)
            //{
            //    Access.ClosedAccess();
            //    AdminUser myUser = new AdminUser();
            //    return myUser;
            //}
        }

        public static string ChangePass(Int16 UserId, string OldName, string OldPass, string UserName, string FullName, string Password)
        {
            try
            {
                Int16 myResult = 0;
                string myIP = System.Web.HttpContext.Current.Request.UserHostAddress;
                Access.InitAccess();
                {
                    Byte[] myPassword = Access.SecurityTool(Password);
                    Byte[] myOldPassword = Access.SecurityTool(OldPass);
                    Access.mySqlCommand.CommandText = "Sp_Admin_ChangePass";
                    Access.mySqlCommand.Parameters.Add("@User_Id", SqlDbType.TinyInt).Value = UserId;
                    Access.mySqlCommand.Parameters.Add("@User_OldName", SqlDbType.NVarChar).Value = OldName;
                    Access.mySqlCommand.Parameters.Add("@User_OldPassword", SqlDbType.Binary, 16).Value = myOldPassword;
                    Access.mySqlCommand.Parameters.Add("@User_UserName", SqlDbType.NVarChar).Value = UserName;
                    Access.mySqlCommand.Parameters.Add("@User_FullName", SqlDbType.NVarChar).Value = FullName;
                    Access.mySqlCommand.Parameters.Add("@User_Password", SqlDbType.Binary, 16).Value = myPassword;
                    Access.mySqlCommand.Parameters.Add("@IPAddress", SqlDbType.NVarChar).Value = myIP;
                }
                myResult = Convert.ToInt16(Access.mySqlCommand.ExecuteNonQuery());
                Access.ClosedAccess();
                if (myResult == 2)
                {
                    return "1-Cập nhật thông tin tài khoản ' " + UserName + " ' thành công.";
                }
                else
                {
                    return "0-Cập nhật thông tin tài khoản ' " + UserName + " ' không thành công.";
                }
            }
            catch (Exception)
            {
                Access.ClosedAccess();
                return "0-Đã xảy ra lỗi trong quá trình cập nhật thông tin tài khoản ' " + UserName + " '.";
            }
        }

        public static string AddUser(string UserName, string FullName, string Password, bool User_Function, bool IsActive, string Current)
        {
            //try
            //{
                Int16 myResult = 0;
                string myIP = System.Web.HttpContext.Current.Request.UserHostAddress;
                Access.InitAccess();
                
                {
                    Byte[] myPassword = Access.SecurityTool(Password);
                    Access.mySqlCommand.CommandText = "Sp_Admin_AddUser";
                    Access.mySqlCommand.Parameters.Add("@User_CurrentUser", SqlDbType.NVarChar).Value = Current;
                    Access.mySqlCommand.Parameters.Add("@User_UserName", SqlDbType.NVarChar).Value = UserName;
                    Access.mySqlCommand.Parameters.Add("@User_FullName", SqlDbType.NVarChar).Value = FullName;
                    Access.mySqlCommand.Parameters.Add("@User_Password", SqlDbType.Binary, 16).Value = myPassword;
                    Access.mySqlCommand.Parameters.Add("@User_Function", SqlDbType.Bit).Value = User_Function;
                    Access.mySqlCommand.Parameters.Add("@IsActive", SqlDbType.Bit).Value = IsActive;
                    Access.mySqlCommand.Parameters.Add("@IPAddress", SqlDbType.NChar).Value = myIP;
                }
                myResult = Convert.ToInt16(Access.mySqlCommand.ExecuteNonQuery());
                Access.ClosedAccess();
                if (myResult == 2)
                {
                    return "Thêm mới thông tin tài khoản ' " + UserName + " ' thành công.";
                }
                else
                {
                    return "Thêm mới thông tin tài khoản ' " + UserName + " ' không thành công. Tài khoản này đã tồn tại";
                }
            //}
            //catch (Exception)
            //{
            //    Access.ClosedAccess();
            //    return "Đã xảy ra lỗi trong quá trình thêm mới thông tin tài khoản ' " + UserName + " '.";
            //}
        }

        //public string SimpleUpdateUser(UpdateList myUpdateList, string Current)
        //{
        //    try
        //    {
        //        Int16 myTotal = 0;
        //        Access.InitAccess();
        //        Int16 myResult = 0;
        //        string myIP = System.Web.HttpContext.Current.Request.UserHostAddress;
        //        foreach (Update myItem in myUpdateList.Items)
        //        {
        //            {
        //                Access.mySqlCommand.Parameters.Clear();
        //                 Access.mySqlCommand.CommandText = "Sp_Admin_User_SimpleUpdateUser";
        //                Access.mySqlCommand.Parameters.Add("@User_Id", SqlDbType.TinyInt).Value = myItem.ItemId;
        //                Access.mySqlCommand.Parameters.Add("@User_CurrentUser", SqlDbType.NVarChar).Value = Current;
        //                Access.mySqlCommand.Parameters.Add("@User_UserName", SqlDbType.NVarChar).Value = myItem.Name;
        //                Access.mySqlCommand.Parameters.Add("@User_Function", SqlDbType.Bit).Value = myItem.IsHot;
        //                Access.mySqlCommand.Parameters.Add("@IsActive", SqlDbType.Bit).Value = myItem.IsActive;
        //                Access.mySqlCommand.Parameters.Add("@IPAddress", SqlDbType.NChar).Value = myIP;
        //            }
        //            myResult = Convert.ToInt16(Access.mySqlCommand.ExecuteNonQuery());
        //            if (myResult == 2)
        //            {
        //                myTotal += 1;
        //            }
        //        }
        //        Access.ClosedAccess();
        //        if (myTotal == myUpdateList.Items.Count())
        //        {
        //            return "Cập nhật thông tin tài khoản thành công.";
        //        }
        //        else
        //        {
        //            return "Có một (nhiều) tài khoản không thể cập nhật lại thông tin.";

        //        }
        //    }
        //    catch (Exception)
        //    {
        //        Access.ClosedAccess();
        //        return "Đã xảy ra lỗi trong quá trình cập nhật tài khoản.";
        //    }
        //}

        public string DeleteUser(Int16 User_Id, string UserName, string Current)
        {
            try
            {
                Access.InitAccess();
                Int16 myResult = 0;
                string myIP = System.Web.HttpContext.Current.Request.UserHostAddress;
                {
                    Access.mySqlCommand.Parameters.Clear();
                    Access.mySqlCommand.CommandText = "Sp_Admin_User_DeleteUser";
                    Access.mySqlCommand.Parameters.Add("@User_Id", SqlDbType.TinyInt).Value = User_Id;
                    Access.mySqlCommand.Parameters.Add("@User_CurrentUser", SqlDbType.NVarChar).Value = Current;
                    Access.mySqlCommand.Parameters.Add("@User_UserName", SqlDbType.NVarChar).Value = UserName;
                    Access.mySqlCommand.Parameters.Add("@IPAddress", SqlDbType.NChar).Value = myIP;
                }
                myResult = Convert.ToInt16(Access.mySqlCommand.ExecuteNonQuery());
                Access.ClosedAccess();
                if (myResult == 2)
                {
                    return "1-Xóa thông tin tài khoản thành công.";
                }
                else
                {
                    return "0-Xóa thông tin tài khoản không thành công.";

                }
            }
            catch (Exception)
            {
                Access.ClosedAccess();
                return "0-Đã xảy ra lỗi trong quá trình xóa thông tin tài khoản.";
            }
        }

        #endregion

        #region  Get Users List For Admin

        public DataTable GetUserListForAdmin()
        {
            try
            {
                Access.InitAccess();
                {
                    Access.mySqlCommand.CommandText = "Sp_Admin_User_GetUsersListForAdmin";
                }
                SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(Access.mySqlCommand);
                DataSet myDataset = new DataSet();
                mySqlDataAdapter.Fill(myDataset, "UsersList");
                Access.ClosedAccess();
                return myDataset.Tables[0];
            }
            catch (Exception)
            {
                Access.ClosedAccess();
                return null;
            }
        }

        #endregion


    }

}
